package sort;//冒泡排序

import java.util.Arrays;

public class BubbleSort {


    public static void main(String[] args) {
        int array[] = {3,9,-1,10,20};
        long startTime = System.currentTimeMillis();

        //下面测试冒泡排序速度(n^2) 给80000个数据
        //创建80000个数据
//        int[] array = new int[80000];
//        for (int i = 0; i < 80000; i++) {
//            array[i]= (int) (Math.random()*800000);
//        }

        Soulution soulution = new Soulution();
        soulution.BubbleSort(array);

        long endTime = System.currentTimeMillis(); //获取结束时间
        System.out.println("程序运行时间： " + (endTime - startTime) + "ms");

    }
    static class Soulution {
        public void BubbleSort(int[] array){
            int temp ; //用于交换
            boolean flag = false;

            for (int j = 0; j < array.length - 1; j++) {
                //第一趟排序就是将最大的数排在最后
                for (int i = 0; i < array.length - j - 1; i++) {
                    //如果逆序 前后交换
                    if (array[i]>array[i+1]) {
                        flag=true;
                        temp=array[i];
                        array[i]=array[i+1];
                        array[i+1]=temp;
                    }

                }
                System.out.println("第"+(j+1)+"次排序:");
                System.out.println(Arrays.toString(array));

                //优化操作避免多余的排序
                if (!flag){   //如果flag为false 说明一次交换都没有发生过 说明排序完成
                    break;
                }else {
                    flag=false;     //将前面的flag=true 置回false 用于下一次判断
                }
            }

        }
    }

}

